我想对我拥有的执行异步操作的方法进行单元测试:
Task.Factory.StartNew(() => { // method to test and return value var result = LongRunningOperation(); });
我在我的单元测试(用 c# 编写)中存根了必要的方法等,但问题是在我断言测试之前异步操作没有完成。
我怎样才能解决这个问题?我应该创建 TaskFactory 的模拟或任何其他对异步操作进行单元测试的技巧吗?
您必须有某种方法来伪造任务创建。
如果您将Task.Factory.StartNew调用移至某个依赖项 ( ILongRunningOperationStarter),那么您可以创建一个替代实现,用于TaskCompletionSource创建在您希望它们完成的位置完成的任务。
Task.Factory.StartNew
ILongRunningOperationStarter
TaskCompletionSource
如果您不想伪造整个任务创建,您可以替换任务工厂,并以这种方式控制时间 - 但老实说,我怀疑这会更麻烦。